package shoppingmall.manage.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import shoppingmall.manage.dto.PageBean;
import shoppingmall.manage.dto.Result;
import shoppingmall.manage.pojo.User;
import shoppingmall.manage.service.UserService;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 平台会员管理相关 controller层
 */
@Slf4j
@RestController
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 分页查询平台会员用户信息
     */
    @GetMapping("/manage/member")
    public Result getUserList (@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int pageSize) {
        log.info("分页查询平台会员用户信息page:{},pageSize:{}",page,pageSize);
        //调用服务层方法
        PageBean pageBean = userService.getUserList(page, pageSize);
        //返回结果
        if(pageBean.getTotal() == 0) {
            return Result.error("未查询到平台会员用户信息!");
        }
        return Result.success(pageBean);
    }

    /**
     * 对平台会员用户信息进行修改
     */
    @PutMapping("/manage/member")
    public Result updateUser (@RequestBody User user) {
        log.info("修改平台会员用户信息，用户id:{}",user.getId());
        //调用服务层方法
        boolean isUpdate = userService.updateUser(user);
        if(!isUpdate) {
            return Result.error("会员用户信息更新失败!");
        }
        return Result.success("会员用户信息更新成功!");
    }

    /**
     * 对平台会员用户进行删除
     */
    @DeleteMapping("/manage/member")
    public Result deleteUser (@RequestParam int userId) {
        log.info("删除一个平台会员用户,用户id{}",userId);
        boolean isDel = userService.deleteUser(userId);
        if(!isDel) {
            return Result.error("会员用户删除失败!");
        }
        return Result.success("会员用户删除成功!");
    }

    /**
     * 对平台会员用户进行多个删除
     * @param userIds
     * @return
     */
    @DeleteMapping("/manage/members")
    public Result deleteUsers (@RequestBody List<Integer> userIds) {
        log.info("删除多个平台会员用户信息,id:{}",userIds);
        //调用服务层方法
        boolean isDelete = userService.deleteUsers(userIds);
        if(!isDelete) {
            return Result.error("批量删除平台会员失败!");
        }
        return Result.success("批量删除平台会员成功!");
    }

    /**
     * 根据会员用户名模糊查询平台会员用户信息
     * @param username
     * @return
     */
    @GetMapping("/manage/members")
    public Result getUserListByLikeUsername (@RequestParam String username){
        log.info("模糊查询平台会员用户信息,username={}",username);
        //调用服务层方法
        PageBean pageBean = userService.getUserListByLikeUsername(username);
        //返回结果
        if(pageBean.getTotal() == 0) {
            return Result.success("未查询到平台会员用户信息!");
        }
        return Result.success(pageBean);
    }

    /**
     * 添加一个平台会员用户(测试接口-前台api接口应该做的)
     */
    @PostMapping("/manage/member")
    public Result saveUser (@RequestBody User user){
        log.info("添加一个平台会员用户信息,用户名:{}",user.getUsername());
        //调用服务层方法
        boolean isSave = userService.saveUser(user);
        if(!isSave) {
            return Result.error("平台会员用户添加失败!");
        }
        return Result.success("添加平台会员成功!");
    }

    /**
     * 查询某个时间段内创建的用户数量(数据大屏)
     */
    @GetMapping("/manage/members/time")
    public Result getUserListByTimeQuantum (@RequestParam String startDate, String endDate) {
        log.info("根据某一时间段查询平台会员用户,开始时间={},结束时间={}",startDate, endDate);
        //调用服务层方法
        PageBean pageBean = userService.getUserListByTimeQuantum(startDate, endDate);
        //返回结果
        if(pageBean.getTotal() == 0) {
            return Result.success("未查询到该时间段内平台会员用户!");
        }
        return Result.success(pageBean);
    }

    /**
     * 查询平台注册会员总人数信息(数据大屏)
     */
    @GetMapping("/manage/members/count")
    public Result getUserCount () {
        log.info("查询平台注册会员总人数!");
        //调用服务层方法
        int userCount = userService.getUserCount();
        if(userCount == 0) {
            return Result.success("平台注册会员数为0");
        }
        Map<String, Integer> map = new HashMap<>();
        map.put("memberCount",userCount);
        return Result.success(map);
    }
}
